package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import malagaAcoge.model.entities.Expediente;
import malagaAcoge.utils.JPAUtils;

public class ExpedienteDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public ExpedienteDao() {
		jpaUtils = new JPAUtils();

	}

	@SuppressWarnings("unchecked")
	public static List<Expediente> findAll() {
		List<Expediente> expedientes = new ArrayList<Expediente>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em.createQuery("select u from Expediente u");
			expedientes = q.getResultList();
		} catch (Exception e) {
			System.out.println("Error en metodo findAllExpediente");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return expedientes;

	}

	public static Expediente findExpediente(int id) {
		Expediente expediente = null;
		try {
			em = jpaUtils.getEntityManager();
			expediente = (Expediente) em.find(Expediente.class, id);
		} catch (Exception e) {
			System.out.println("Error en metodo findExpediente");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return expediente;

	}

	public static void createExpediente(Expediente expediente) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(expediente);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createExpediente:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updateExpediente(Expediente expediente) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(expediente);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo updateExpediente:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteExpediente(int idExpediente) {
		try {
			em = jpaUtils.getEntityManager();
			Expediente expediente = em.find(Expediente.class, idExpediente);
			if (expediente != null) {
				em.getTransaction().begin();
				em.remove(expediente);
				em.getTransaction().commit();
			}
		} catch (Exception e) {
			System.out.println("Error en metodo deleteExpediente:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static Expediente findUserExpediente(int idUsuario) {
		Expediente expediente = null;
		try {
			em = jpaUtils.getEntityManager();
			Query q = em.createQuery("select exp from Expediente exp where exp.usuarioBean.idUsuario = :idUsuario").setParameter("idUsuario", idUsuario);
			expediente = (Expediente) q.getSingleResult();
		
		}catch (NoResultException e) {
			System.out.println("El usuario no tiene expediente.");
		}
		catch (Exception e) {
			System.out.println("Error en metodo findExpediente");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return expediente;
	}
}
